#include<bits/stdc++.h>
using namespace std;
inline int read() {
	register int s=0,f=1;
	register char ch=getchar();
	while(!isdigit(ch)) { if(ch=='-') f=-f; ch=getchar(); }
	while(isdigit(ch)) { s=(s<<1)+(s<<3)+(ch^48); ch=getchar(); }
	return s*f;
}
const int N=100005;
int n,head[N],cnt,num[N][22],f[N],sum[N],Ans[N<<1];
struct node { int to,w,nxt; } e[N<<1];
void add(int u,int v,int w) {
	e[++cnt].to=v,e[cnt].w=w,e[cnt].nxt=head[u],head[u]=cnt;
	Ans[cnt]=-1;
}
vector < pair<int,int> > q[N];
int Num[N][22];
int Match(int u) {
	int tot=0;
	for(int i=1;i<=20;i++) Num[u][i]=num[u][i];
	for(int i=0;i<q[u].size();i++) {
		int v=q[u][i].first,w=q[u][i].second;
		for(int j=1;j<=w;j++) Num[v][j]=num[v][j];
		for(int j=w+1;j<=20;j++) Num[v][w]+=num[v][j];
		Num[v][w]++;
	}
	for(int i=0;i<q[u].size();i++) {
		for(int j=1;j<=20;j++) {
			for(int k=1;k<=20;k++) {
				int v=q[u][i].first,w=q[u][i].second;
				tot+=Num[v][j]*(Num[u][k]-Num[v][k])*min(j,k);
			}
		}
	}
	for(int i=1;i<=20;i++) Num[u][i]=0;
	return tot/2;
}
void dfs(int u,int fa) {
	for(int i=head[u];i;i=e[i].nxt) {
		int v=e[i].to,w=e[i].w;
		if(v==fa) continue;
		dfs(v,u);
		sum[u]+=sum[v];
		for(int j=1;j<=w;j++) num[u][j]+=num[v][j];
		for(int j=w+1;j<=20;j++) num[u][w]+=num[v][j];
		num[u][w]++;
		
		q[u].push_back(make_pair(v,w));
	}
	for(int i=1;i<=20;i++) f[u]+=num[u][i]*i;
	sum[u]+=f[u]; sum[u]+=Match(u);
}
void dfs2(int u,int fa) {
	for(int i=head[u];i;i=e[i].nxt) {
		int v=e[i].to,w=e[i].w;
		if(v==fa) continue;
		int res=sum[1];
		for(int j=1;j<=w;j++) res-=num[v][j]*j;
		for(int j=w+1;j<=20;j++) res-=num[v][j]*w;
		res-=w;
		Ans[i]=res;
		dfs2(v,u);
	}
}
signed main() {
	freopen("tatooine.in","r",stdin);
	freopen("tatooine.out","w",stdout);
    int n=read();
    for(int i=1;i<n;i++) {
    	int u=read(),v=read(),w=read();
    	add(u,v,w),add(v,u,w);
	}
	dfs(1,0);
	//cout << sum[1] << " " << sum[2] << " " << sum[3] << "\n";
	dfs2(1,0);
	for(int i=1;i<=cnt;i++) if(Ans[i]>=0) cout<<Ans[i]<<"\n";
	return 0;
}
